Many functionalities and services available over the Internet or over a corporate network are provided by one or more clusters of distributed computing nodes. For example, a database used to run a large scale business may be maintained by, and made available through, a plurality of database servers running on a plurality of distributed computing nodes that form a cluster. Using a cluster of computing nodes to provide a functionality or service may give rise to a number of advantages. For example, with a cluster, it is relatively easy to add another node to increase the capacity of the system to meet increased demand. A cluster also makes it possible to load balance among the various nodes so that if one node becomes overburdened, work can be assigned to other nodes. In addition, a cluster makes it possible to tolerate failures so that if one or more nodes fail, the functionality or service is still available. For these and other reasons, large scale and mission critical services are often provided by one or more clusters of distributed nodes.
The nodes in a cluster often need to exchange/share information with each other. This information sharing may be necessary, for example, in order for the nodes to work together to carry out one or more transactions, to load balance, to implement failure prevention and recovery, etc. Typically, nodes in a cluster share information with each other using a request-response messaging model. Unfortunately, many of the existing messaging models require a significant amount of overhead, and impose a fair amount of latency. In particular, a client thread on one node typically needs to wake up a thread on another node in order to have requests serviced. This waking up may require waiting in queues and incurring delays from context switching. Hence, existing messaging models are inefficient and do not scale well. As a result, for large scale and even smaller scale distributed node systems, an improved information sharing mechanism is needed in order to enable the distributed nodes to exchange/share information with each other more efficiently and effectively.